package com.qf.talk.service;

import com.qf.talk.vo.FriendRequestAddVO;
import com.qf.talk.vo.PolicyVO;

import java.util.List;

/**
 * @author 30909
 */
public interface FriendService {


    /**
     * 注册成为好友模块的用户
     *
     * @param userId
     * @return  数据库操作的结果
     */
    int addFriendBase(Long userId);

    /**
     * 查询所有好友的测
     *
     * @return 返回所有好友的策略
     */
    List<PolicyVO> selectPolicies();

    /**
     * 修改用户的好友策略
     *
     * @param userId   用户的id
     * @param policyId 好友策略的id
     * @param question 验证码问题
     * @param answer   验证问题的答案
     * @param password 好友验证的密码
     * @return 返回数据库操作的结果
     */
    int updatePolicyById(Long userId,
                         Integer policyId,
                         String question,
                         String answer,
                         String password);


    /**
     * 添加好友的方法
     *
     * @param userId  用户id
     * @param wantId  想要添加好友的id
     * @param message 附带的信息
     *                附带信息会结合wantId用户的
     *                friend_ship_policy_id的值实现其含义
     *                friend_ship_policy_id    含义
     *                1                        意义
     *                2                        验证问题的答案
     *                3                        好友验证的问题
     *                4                        好友验证的信息
     *                5                        无意义
     * @param groupId 好友分组的id
     * @return 0       代表未添加成功
     * 1       代表添加成功
     * 2       代表等待确认
     */
    int addFriend(Long userId, Long wantId, String message, Long groupId);

    /**
     * 答复请求的方法
     * 张三请求李四 张三是请求人，历史是被请求人
     * 被请请求人  同意/拒绝
     *
     * @param id    请求的主键id
     * @param state 1 同意 拒绝
     * @param
     */
    Long askRequest(Long id, Integer state, Long userId, Long groupId);


    /**
     * 分也页查询数据
     * @param userId 用户id
     * @param lastItemId 上一页的最后一个条目的id,如果是第一页,此值为null
     * @param pageSize 也得大小
     * @return  z这一页返回的userId用户的请求对象集合
     */
    List<FriendRequestAddVO> selectRequestByPage(Long userId,Integer lastItemId,Integer pageSize);
}
